/*
 * L'Key 0.0.4
 * jQuery plagin
 * 
 * Copyright 2010, OmegaScorp
 */
(function ($) {
    $.lkeyfunctions=[];
    $.lkeychars={
        8:'backspace',
        9:'tab',
        13:'enter',
        19:'break',
        20:'capslock',
        32:'space',
        33:'pageup',
        34:'pagedown',
        35:'end',
        36:'home',
        37:'left',
        38:'top',
        39:'right',
        40:'bottom',
        44:'prtsc',
        45:'ins',
        46:'del',
        121:'F10',
        122:'F11',
        123:'F12',
        186:';',
        187:'=',
        188:',',
        189:'-',
        190:'.',
        190:'/',
        192:'`',
        219:'[',
        221:']',
        222:'\'',
        220:'\\'
        };
    $(document).keyup(function(event){
        var object=$(event.target);
        var key='';
        var alt=false;
        var ctrl=false;
        var shift=false;
        if(event.ctrlKey){
            ctrl=true;
        }
        if(event.altKey){
            alt=true;
        }
        if(event.shiftKey){
            shift=true;
        }
        code=event.keyCode ? event.keyCode : event.which ? event.which : null;
        x=$.lkeychars[code];
        if(x!=undefined){
            key=x;
        }
        if(code>=65&&code<=90){
            key=String.fromCharCode(code+32);
        }
        else if(code>=48&&code<=57){
            key=String.fromCharCode(code);
        }
        else if(code>=112&&code<=120){
            key='F'+String.fromCharCode(code-63);
        }
        else{
            switch(code){
                case 16:
                    shift=true;
                    break;
                case 17:
                    ctrl=true;
                    break;
                case 18:
                    alt=true;
                    break;
            }
        }
        lkey(object, alt, ctrl, shift, key);
    });
    function lkey(object, alt, ctrl, shift, key){
        a={'alt':alt, 'ctrl':ctrl, 'shift':shift, 'key':key}
        for(k in $.lkeyfunctions){
            f=$.lkeyfunctions[k];
            if(f.any||alt==f.alt&&ctrl==f.ctrl&&shift==f.shift&&key==f.key){
                o=f.object;
                $.fn.lkey_x=f.func;
                if(o.get(0).tagName=='INPUT'||o.get(0).tagName=='TEXTAREA'){
                    if(o.attr('focused')=='true'){
                        o.lkey_x(a);
                    }
                }
                else{
                    o.lkey_x(a);
                }
            }
        }
    }
    $.lkey=function(keys, func){
        $(document).lkey(keys, func);
    }
    $.fn.lkey=function(keys, func){
        var key='';
        var ctrl=false;
        var alt=false;
        var shift=false;
        var any=false;
        
        if(func!=undefined){
            keys.toLowerCase();
            
            arr=keys.split('+');
            for(k in arr){
                val = arr[k];
                switch(val){
                    case 'alt': alt=true; break;
                    case 'ctrl': ctrl=true; break;
                    case 'shift': shift=true; break;
                    default: key=val;
                }
            }
        }
        else{
            func=keys;
            any=true;
        }
        if($(this).get(0).tagName=='INPUT'||$(this).get(0).tagName=='TEXTAREA'){
            $(this)
            .attr('focused', false)
            .focus(function(){
                $(this).attr('focused', true);
            })
            .blur(function(){
                $(this).attr('focused', false);
            });            
        }
        $.lkeyfunctions.push({
            'object': this,
            'key': key,
            'shift': shift,
            'ctrl': ctrl,
            'alt': alt,
            'func': func,
            'any': any
        })
    };
})(jQuery);